package com.itheima.threadpool;

import java.util.concurrent.*;

/*
自定义线程池
 */
public class Demo03 {

    public static void main(String[] args) {
        //前两位 int
        //中间两位 开出临时员工的时间 第一位long  第二位是TimeUnit
        //阻塞队列
        //阻塞队列  数组或 链表  数组特点长度固定 链表  长度无限
        //如何创建线程  工具类中有一个默认工厂 Executors.defaultThreadFactory
        //如何拒绝 ThreadPoolExecutor静态内部类
        ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 5, 2, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(5), Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardOldestPolicy()
        );
        for (int i=0;i<20;i++) {
            int k=i;
            pool.submit(()->{
                for (int j = 0; j < 10; j++) {
                    String name = Thread.currentThread().getName();
                    System.out.println(k+"个任务正在执行"+name+"@@@"+j);
                }
            });
        }
        pool.shutdown();

    }

    //1.获得管理员对象，
    //创建信号量
    public void run() {
        //2.获得通行证
            //3.开始行驶
            //4.归还通行证
    }
}
